home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 5_5.lha / 5_5 / 5_5a5.c < prev    next >
Text File  |  1993-08-08  |  1KB  |  58 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. tatic tree* prim(istream& input)
  6.  
  7.    tree* ret = new tree;
  8.  
  9.    switch (curr_tok.type)
  10. {
  11. case NUMBER:
  12. f (debug) cout << "prim() sees NUMBER " << curr_tok.value << "\n";    // DELETE
  13.     ret->type = NUMBER;
  14.     ret->value = curr_tok.value;
  15.     get_token(input);        // skip number
  16. f (debug) { cout << "prim():ret:\n"; ret->print(0); }    // DELETE
  17.     return ret;
  18.  
  19. case MINUS:
  20. f (debug) cout << "prim() sees -\n";    // DELETE
  21.     ret->type = MINUS;
  22.     get_token(input);        // skip '-'
  23.     ret->left = prim(input);
  24.     ret->right = 0;
  25. f (debug) { cout << "prim():ret:\n"; ret->print(0); }    // DELETE
  26.     return ret;
  27.  
  28. case LP:
  29. f (debug) cout << "prim() sees (\n";    // DELETE
  30.     ret->type = LP;
  31.     get_token(input);        // skip '('
  32.     ret->left = get_expr(input);
  33.     if (curr_tok.type != RP)
  34.         {
  35.     error(") expected");
  36.     break;
  37.     }
  38.     get_token(input);        // skip ')'
  39. f (debug) { cout << "prim():ret:\n"; ret->print(0); }    // DELETE
  40.     return ret;
  41.  
  42. case END:
  43. f (debug) cout << "prim() sees END\n";    // DELETE
  44.     error("end of expression unexpected");
  45.     break;
  46.  
  47. default:
  48. f (debug) cout << "prim() sees UNKNOWN\n";    // DELETE
  49.     error("unknown type within tree");
  50.     break;
  51. }
  52.  
  53.    // error case
  54.    ret->value = 0;
  55.    ret->type = NUMBER;
  56.    return ret;
  57.  
  58.